home *** CD-ROM | disk | FTP | other *** search
Text File | 1999-05-01 | 5.7 KB | 231 lines | [TEXT/CWIE] |
- /*
- File: MegaDialog.cp
-
- Contains: Code to drive our MegaDialog example.
-
- Version: Appearance 1.0 SDK
-
- Copyright: © 1997, 1999 by Apple Computer, Inc., all rights reserved.
-
- File Ownership:
-
- DRI: Edward Voas
-
- Other Contact: 7 of 9, Borg Collective
-
- Technology: OS Technologies Group
-
- Writers:
-
- (jss) Jeff Shulman
- (edv) Ed Voas
-
- Change History (most recent first):
- $Log: MegaDialog.cp,v $
- Revision 1.7 1999/04/29 20:52:27 voas
- use HELP_TAGS_ENABLED
-
- Revision 1.6 1999/04/23 23:25:58 voas
- [2296424] Use timers to control progress bar/caret blinking instead of
- relying on WNE timeouts.
-
- Revision 1.5 1999/04/15 00:39:23 mattack
- guyf edited the sources so they'd build on 8 and X while menu stuff was
- in flux.
-
-
- <1.4> 4/7/99 jss Add help tag stuff
- <1> 9/11/97 edv First checked in.
- */
-
- #include "AppearanceSamplePrefix.h"
-
- #include <Appearance.h>
- #include "MegaDialog.h"
- #include "ProgressPane.h"
- #include "SliderPane.h"
- #include "ClassicPane.h"
- #include "TextPane.h"
- #include "LayoutPane.h"
- #include "NewButtonPane.h"
-
- enum
- {
- kNoPane = 0,
- kClassicPane = 1,
- kSliderPane = 2,
- kTextPane = 3,
- kProgressPane = 4,
- kLayoutPane = 5,
- kNewPane = 6
- };
-
- MegaDialog::MegaDialog() : BaseDialog( 6000 )
- {
- ControlHandle control;
-
- #if HELP_TAGS_ENABLED
- // Set help for the tab control
- fHelpContentProviderUPP = NewHMControlContentUPP( HelpContentProvider );
-
- ::GetDialogItemAsControl( fDialog, 1, &control );
- ::HMInstallControlContentCallback( control, fHelpContentProviderUPP );
-
- // Set help for the dialog itself
- {
- HMHelpContentRec windowHelpContent;
-
- windowHelpContent.version = kMacHelpVersion;
- ::GetWindowBounds( GetDialogWindow( fDialog ), kWindowContentRgn, &windowHelpContent.absHotRect );
- windowHelpContent.tagSide = kHMDefaultSide;
-
- // Our minimum content is on a STR resource
- windowHelpContent.content[ kHMMinimumContentIndex ].contentType = kHMStrResContent;
- windowHelpContent.content[ kHMMinimumContentIndex ].u.tagStrRes = 6000;
-
- // No maximum content
- windowHelpContent.content[ kHMMaximumContentIndex ].contentType = kHMNoContent;
-
- ::HMSetWindowHelpContent( GetDialogWindow( fDialog ), &windowHelpContent );
- }
- #endif
-
- fPane = nil;
- SwitchPane( kClassicPane );
- }
-
- MegaDialog::~MegaDialog()
- {
- delete fPane;
- }
-
- void
- MegaDialog::SwitchPane( SInt16 paneIndex )
- {
- ControlHandle control;
-
- if ( paneIndex == 0 ) return;
-
- delete fPane;
- fPane = nil;
-
- GetDialogItemAsControl( fDialog, 1, &control );
- SetControlValue( control, paneIndex );
-
- switch ( paneIndex )
- {
- case kProgressPane:
- fPane = new ProgressPane( fDialog, CountDITL( fDialog ) );
- break;
-
- case kSliderPane:
- fPane = new SliderPane( fDialog, CountDITL( fDialog ) );
- break;
-
- case kClassicPane:
- fPane = new ClassicPane( fDialog, CountDITL( fDialog ) );
- break;
-
- case kTextPane:
- fPane = new TextPane( fDialog, CountDITL( fDialog ) );
- break;
-
- case kLayoutPane:
- fPane = new LayoutPane( fDialog, CountDITL( fDialog ) );
- break;
-
- case kNewPane:
- fPane = new NewButtonPane( fDialog, CountDITL( fDialog ) );
- break;
- }
- }
-
- void
- MegaDialog::HandleItemHit( SInt16 item )
- {
- if ( item == 1 )
- {
- ControlHandle control;
-
- GetDialogItemAsControl( fDialog, 1, &control );
- SwitchPane( GetControlValue( control ) );
- }
- else if ( fPane )
- {
- fPane->ItemHit( item );
- }
- }
-
- pascal OSStatus
- MegaDialog::HelpContentProvider(ControlRef inControl, Point inGlobalMouse, HMContentRequest inRequest, HMContentProvidedType *outContentProvided, HMHelpContentPtr ioHelpContent)
- {
- ControlGetRegionRec getRegionRec;
- Point localMouse;
- GrafPtr currPort;
-
- // Only care if asked to supplu content, we don't have anything special to dispose of
- if ( inRequest != kHMSupplyContent )
- return noErr;
-
- // Get a region for the tabs
- getRegionRec.region = ::NewRgn();
- if ( getRegionRec.region == NULL )
- return ::MemError();
-
- // Convert the global mouse to dialog relative
- ::GetPort( &currPort );
- ::SetPortWindowPort( GetControlOwner( inControl ) );
-
- localMouse = inGlobalMouse;
- ::GlobalToLocal( &localMouse );
-
- // Assume we have no content
- *outContentProvided = kHMContentNotProvided;
-
- // See if we are in any tab
- for ( SInt16 tabIndex = GetControlMinimum( inControl ); tabIndex <= GetControlMaximum( inControl ); tabIndex++ )
- {
- getRegionRec.part = tabIndex;
-
- if ( ( SendControlMessage( inControl, kControlMsgGetRegion, (SInt32) &getRegionRec ) == noErr ) &&
- PtInRgn( localMouse, getRegionRec.region ) )
- {
- // We found the tab, supply the content
-
- // First set the *global* hot rect
- ::GetRegionBounds( getRegionRec.region, &(ioHelpContent->absHotRect) );
- ::LocalToGlobal( &topLeft(ioHelpContent->absHotRect) );
- ::LocalToGlobal( &botRight(ioHelpContent->absHotRect) );
-
- ioHelpContent->tagSide = kHMDefaultSide;
-
- // Our minimum content is on a STR# resource
- ioHelpContent->content[ kHMMinimumContentIndex ].contentType = kHMStringResContent;
- ioHelpContent->content[ kHMMinimumContentIndex ].u.tagStringRes.hmmResID = 6000;
- ioHelpContent->content[ kHMMinimumContentIndex ].u.tagStringRes.hmmIndex = tabIndex;
-
- // No maximum content
- ioHelpContent->content[ kHMMaximumContentIndex ].contentType = kHMNoContent;
-
- *outContentProvided = kHMContentProvided;
- break;
- }
- }
-
- // If in the content of the tab control then don't propagate to the window
- if ( *outContentProvided == kHMContentNotProvided )
- {
- getRegionRec.part = kControlContentMetaPart;
-
- if ( ( SendControlMessage( inControl, kControlMsgGetRegion, (SInt32) &getRegionRec ) == noErr ) &&
- PtInRgn( localMouse, getRegionRec.region ) )
- *outContentProvided = kHMContentNotProvidedDontPropagate;
- }
-
-
- ::DisposeRgn( getRegionRec.region );
- ::MacSetPort( currPort );
-
- return noErr;
- }
-